package cn.edu.njust.alg.leetcode;

public class Leetcode_202_happynumber {

	/*
	 * Write an algorithm to determine if a number is "happy".
	 * 
	 * A happy number is a number defined by the following process: Starting
	 * with any positive integer, replace the number by the sum of the squares
	 * of its digits, and repeat the process until the number equals 1 (where it
	 * will stay), or it loops endlessly in a cycle which does not include 1.
	 * Those numbers for which this process ends in 1 are happy numbers.
	 * 
	 * Example: 19 is a happy number
	 * 
	 * 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
	 */
	public boolean isHappy(int n) {
		int t = n;
		int sum = 0;
		int j;
		while (true) {
			sum = 0;
			while (t != 0) {
				j = t % 10;
				sum += j * j;
				t = t / 10;
			}
			if (sum == 1) {
				return true;
			} else if (sum == 4) {
				return false;
			}
			t = sum;
		}
	}

	public static void main(String[] args) {
		for (int i = 1; i < 1000; i++) {
			System.out.println(i + ": "
					+ new Leetcode_202_happynumber().isHappy(i));
		}
	}
}
